package org.pictual.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.pictual.business.vo.CompletoVO;
import org.pictual.business.vo.DefinicionVO;
import org.pictual.business.vo.IdiomaVO;
import org.pictual.business.vo.ImagenVO;
import org.pictual.business.vo.PalabraVO;
import org.pictual.controller.GoogleSearchImg;
import org.pictual.controller.MyImage;
import org.pictual.controller.mainPackage.Language;
import org.pictual.service.PictualDelegateFactory;
import org.pictual.util.Mail;
import org.pictual.util.PalabraEnTabla;

public class WithoutImgAction extends Action{

	protected static Logger log= Logger.getLogger(WithoutImgAction.class);
	
	private ImagenVO[] imagenes = new ImagenVO[6];

	
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		long t1 = System.currentTimeMillis();
		ServletContext context = getServlet().getServletContext();
		HttpSession sesion= request.getSession();

		String order = request.getParameter("order");
		String lang = request.getParameter("lang");
		
		List<CompletoVO> listado = PictualDelegateFactory.getIdiomaDelegate().selectListado(lang, null, "false");
//		ArrayList<PalabraEnTabla> listadoPalabras = new ArrayList<PalabraEnTabla>();
		
		PalabraEnTabla pet;
		boolean haveImage;
		
		List<String> words = new ArrayList<String>();
		int idioma = 0, wiki = 0;
		
		ArrayList<String> masivas = new ArrayList<String>();
		for(CompletoVO completo: listado){
			
			words.add(completo.getPalabra());
			
			haveImage = PictualDelegateFactory.getPalabraDelegate().haveImages(completo.getId());
			
			findImages(completo.getPalabra(), Language.resolve(completo.getIdioma()));
			int palabra_id = completo.getId();
			PalabraVO palabraVO = new PalabraVO();
			palabraVO.setPalabra_id(palabra_id);
			
			
			
			idioma = completo.getIdioma();
			wiki = completo.getWiki();
			
			CompletoVO completoVO = PictualDelegateFactory.getIdiomaDelegate().selectPalabraCompleta(completo.getPalabra(), idioma, wiki);

			DefinicionVO definicionVO = PictualDelegateFactory.getDefinicionDelegate().readDefinicion(palabra_id, idioma, wiki);
			
			IdiomaVO idiomaVO = PictualDelegateFactory.getIdiomaDelegate().readIdioma(completo.getPalabra(), idioma);
			
			palabraVO = PictualDelegateFactory.getPalabraDelegate().readPalabra(palabra_id);

			
			if(completoVO!=null){
				insertInDatabase(palabraVO);
				masivas.add(completo.getPalabra());
			}
			else log.info("No se insertan las imagenes en base de datos porque no existe la palabra");
			
			
		}
		
		long t2 = System.currentTimeMillis();
		long t = (t2 - t1)/1000; // en segundos
		log.info("***timeSearchMasivaImg: LA BUSQUEDA masiva de imagenes TARDA " + t + " SEGUNDOS");
		Mail.enviar(masivas, Language.resolve(idioma), Language.resolve(wiki), t, true);
		return mapping.findForward("success");
	}
	
	public void findImages(String query, String idioma){
		Vector<MyImage> images = null;
		imagenes = new ImagenVO[6];
		log.info("descargando imagenes");
		images = GoogleSearchImg.queryForImages(query, idioma);
		int i=0;
		for(MyImage img: images){
			log.info("imagen encontrada");
			imagenes[i]=new ImagenVO();
			imagenes[i].setHeight(img.getHeight());
			imagenes[i].setWidth(img.getWidth());
			imagenes[i].setPath_big(img.getImgLink());
			imagenes[i].setPath_small(img.getImgThumbnail());
			imagenes[i].setPath_original(img.getImgRef());
			log.info(i+": "+imagenes[i].getPath_big());
			i++;
		}
	}
	
	public void insertInDatabase(PalabraVO palabraVO){
		for(ImagenVO img: imagenes){
			if(img!=null) PictualDelegateFactory.getImagenDelegate().insertImagen(img);
		}
		if(imagenes[0]!=null) palabraVO.setImagen_1(imagenes[0].getImagen_id());
		if(imagenes[1]!=null) palabraVO.setImagen_2(imagenes[1].getImagen_id());
		if(imagenes[2]!=null) palabraVO.setImagen_3(imagenes[2].getImagen_id());
		if(imagenes[3]!=null) palabraVO.setImagen_4(imagenes[3].getImagen_id());
		if(imagenes[4]!=null) palabraVO.setImagen_5(imagenes[4].getImagen_id());
		if(imagenes[5]!=null) palabraVO.setImagen_6(imagenes[5].getImagen_id());
		
		//Actualizo la palabra con las imagenes nuevas
//		System.out.println(palabraVO);
		PictualDelegateFactory.getPalabraDelegate().updatePalabra(palabraVO);
		
//		System.out.println("*******************************************************************************************");
//		System.out.println(palabraVO);
	}
}
